# coding=utf-8

import re
import time
import tkinter as tk

# 查询条件设定界面
class main_GUI(object):
    def __init__(self):
        # 参数初值
        self.ssdm, self.dwmc, self.mldm, self.yjxkdm, self.zymc, self.xxfs = '', '', '', '', '', ''
        ssdm_labels = ['【(0)忽略省份】', '(11)北京市', '(12)天津市', '(13)河北省', '(14)山西省',
                       '(15)内蒙古自治区', '(21)辽宁省', '(22)吉林省', '(23)黑龙江省',
                       '(31)上海市',  '(32)江苏省', '(33)浙江省', '(34)安徽省',
                       '(35)福建省',  '(36)江西省', '(37)山东省', '(41)河南省',
                       '(42)河南省',  '(4 3)湖南省', '(44)广东省', '(45)广西壮族自治区',
                       '(46)海南省',  '(50)重庆市', '(51)四川省', '(52)贵州省',
                       '(53)云南省',  '(54)西藏自治区', '(61)陕西省', '(62)甘肃省',
                       '(63)青海省',  '(64)宁夏回族自治区', '(65)新疆维吾尔自治区',
                       '(71)台湾省',  '(81)香港特别行政区', '(82)澳门特别行政区']

        mldm_labels = ['【(0)忽略门类】', '专业学位 ', '(01)哲学', '(02)经济学', '(03)法学', '(04)教育学', '(05)文学',
                       '(06)历史学', '(07)理学', '(08)工学', '(09)农学', '(10)医学', '(11)军事学', '(12)管理学']

        yjxkdm_labels = ['(0101)哲学', '(0201)理论经济学', '(0202)应用经济学', '(0251)金融',
                         '(0252)应用统计', '(0253)税务', '(0254)国际商务', '(0255)保险',
                         '(0256)资产评估', '(0257)审计', '(0270)统计学', '(0301)法学',
                         '(0302)政治学', '(0303)社会学', '(0304)民族学', '(0305)马克思主义理论',
                         '(0306)公安学', '(0351)法律', '(0352)社会工作', '(0353)警务',
                         '(0401)教育学', '(0402)心理学', '(0403)体育学', '(0451)教育',
                         '(0452)体育', '(0453)汉语国际教育', '(0454)应用心理', '(0471)',
                         '(0501)中国语言文学', '(0502)外国语言文学', '(0503)新闻传播学',
                         '(0551)翻译', '(0552)新闻与传播', '(0553)出版', '(0601)考古学',
                         '(0602)中国史', '(0603)世界史', '(0651)文物与博物馆', '(0701)数学',
                         '(0702)物理学', '(0703)化学', '(0704)天文学', '(0705)地理学',
                         '(0706)大气科学', '(0707)海洋科学', '(0708)地球物理学', '(0709)地质学',
                         '(0710)生物学', '(0711)系统科学', '(0712)科学技术史', '(0713)生态学',
                         '(0714)统计学', '(0771)心理学', '(0772)力学', '(0773)材料科学与工程',
                         '(0774)电子科学与技术', '(0775)计算机科学与技术', '(0776)环境科学与工程',
                         '(0777)生物医学工程', '(0778)基础医学', '(0779)公共卫生与预防医学',
                         '(0780)药学', '(0781)中药学', '(0782)医学技术', '(0783)护理学',
                         '(0784)', '(0785)', '(0786)', '(0801)力学', '(0802)机械工程',
                         '(0803)光学工程', '(0804)仪器科学与技术', '(0805)材料科学与工程',
                         '(0806)冶金工程', '(0807)动力工程及工程热物理', '(0808)电气工程',
                         '(0809)电子科学与技术', '(0810)信息与通信工程', '(0811)控制科学与工程',
                         '(0812)计算机科学与技术', '(0813)建筑学', '(0814)土木工程',
                         '(0815)水利工程', '(0816)测绘科学与技术', '(0817)化学工程与技术',
                         '(0818)地质资源与地质工程', '(0819)矿业工程', '(0820)石油与天然气工程',
                         '(0821)纺织科学与工程', '(0822)轻工技术与工程', '(0823)交通运输工程',
                         '(0824)船舶与海洋工程', '(0825)航空宇航科学与技术',
                         '(0826)兵器科学与技术', '(0827)核科学与技术', '(0828)农业工程',
                         '(0829)林业工程', '(0830)环境科学与工程', '(0831)生物医学工程', 
                         '(0832)食品科学与工程', '(0833)城乡规划学', '(0834)风景园林学',
                         '(0835)软件工程', '(0836)生物工程', '(0837)安全科学与工程',
                         '(0838)公安技术', '(0839)网络空间安全', '(0851)建筑学', '(0852)工程',
                         '(0853)城市规划', '(0870)科学技术史', '(0871)管理科学与工程',
                         '(0872)设计学', '(0901)作物学', '(0902)园艺学', '(0903)农业资源与环境',
                         '(0904)植物保护', '(0905)畜牧学', '(0906)兽医学', '(0907)林学',
                         '(0908)水产', '(0909)草学', '(0951)农业', '(0952)兽医', '(0953)风景园林',
                         '(0954)林业', '(0970)科学技术史', '(0971)环境科学与工程',
                         '(0972)食品科学与工程', '(0973)风景园林学', '(1001)基础医学',
                         '(1002)临床医学', '(1003)口腔医学', '(1004)公共卫生与预防医学',
                         '(1005)中医学', '(1006)中西医结合', '(1007)药学', '(1008)中药学',
                         '(1009)特种医学', '(1010)医学技术', '(1011)护理学', '(1051)临床医学',
                         '(1052)口腔医学', '(1053)公共卫生', '(1054)护理', '(1055)药学',
                         '(1056)中药学', '(1057)中医', '(1071)科学技术史', '(1072)生物医学工程',
                         '(1073)', '(1074)', '(1101)军事思想及军事历史', '(1102)战略学',
                         '(1103)战役学', '(1104)战术学', '(1105)军队指挥学', '(1106)军制学',
                         '(1107)军队政治工作学', '(1108)军事后勤学', '(1109)军事装备学',
                         '(1110)军事训练学', '(1151)军事', '(1201)管理科学与工程',
                         '(1202)工商管理', '(1203)农林经济管理', '(1204)公共管理',
                         '(1205)图书情报与档案管理', '(1251)工商管理', '(1252)公共管理',
                         '(1253)会计', '(1254)旅游管理', '(1255)图书情报', '(1256)工程管理',
                         '(1301)艺术学理论', '(1302)音乐与舞蹈学', '(1303)戏剧与影视学',
                         '(1304)美术学', '(1305)设计学', '(1351)艺术']

        self.window = tk.Tk()
        self.window.geometry('260x190')
        self.window.title('研招网查询助手')

        # 按钮固件
        self.main_menu = tk.Menu(self.window, bg='blue')

        # 选择省份（按钮）
        self.ssdm_menu = tk.Menu(self.main_menu, tearoff=0)
        self.ssdm_v = tk.StringVar()
        for label in ssdm_labels:
            self.ssdm_menu.add_radiobutton(label=label, command=self.get_ssdm, variable=self.ssdm_v, activebackground='orange')
        self.main_menu.add_cascade(label='选择省份', menu=self.ssdm_menu)
        tk.Label(self.window, text='选择省份:', bg='Gray', width=10, anchor=tk.W).grid(row=1)
        tk.Label(self.window, textvariable=self.ssdm_v, bg='Gray', width=25).grid(row=1, column=1)
        self.window.update()

        # 选择门类（按钮）
        self.mldm_menu = tk.Menu(self.main_menu, tearoff=0)
        self.mldm_v = tk.StringVar()
        for label in mldm_labels:
            self.mldm_menu.add_radiobutton(label=label, command=self.get_mldm, variable=self.mldm_v, activebackground='orange')
        self.main_menu.add_cascade(label="门类", menu=self.mldm_menu)
        tk.Label(self.window, text='门类:', width=10, anchor=tk.W).grid(row=0)
        tk.Label(self.window, textvariable=self.mldm_v, fg='Darkred', width=25).grid(row=0, column=1)

        # 选择学科（按钮）
        self.yjxkdm_menu = tk.Menu(self.main_menu, tearoff=0)
        self.yjxkdm_v = tk.StringVar()
        for label in yjxkdm_labels:
            self.yjxkdm_menu.add_radiobutton(label=label, command=self.get_yjxkdm, variable=self.yjxkdm_v, activebackground='orange')
        tk.Scrollbar(self.yjxkdm_menu, bg='red').pack()
        self.main_menu.add_cascade(label='学科【必选】', menu=self.yjxkdm_menu)
        tk.Label(self.window, text='学科【必选】：', bg='Gray', fg='DarkBlue', width=10, anchor=tk.W).grid(row=3)
        tk.Label(self.window, textvariable=self.yjxkdm_v, bg='Gray', width=25).grid(row=3, column=1)

        # 选择学习方式（按钮）
        self.xxfs_menu = tk.Menu(self.main_menu, tearoff=0)
        self.xxfs_v = tk.StringVar()
        self.xxfs_menu.add_radiobutton(label='全日制', command=self.get_xxfs, variable=self.xxfs_v, activebackground='orange')
        self.xxfs_menu.add_radiobutton(label='非全日制', command=self.get_xxfs, variable=self.xxfs_v, activebackground='orange')
        self.xxfs_menu.add_radiobutton(label='【忽略学习方式】', command=self.get_xxfs, variable=self.xxfs_v, activebackground='orange')
        self.main_menu.add_cascade(label='学习方式', menu=self.xxfs_menu)
        tk.Label(self.window, text='学习方式:', bg='Gray', width=10, anchor=tk.W).grid(row=5)
        tk.Label(self.window, textvariable=self.xxfs_v, bg='Gray', width=25).grid(row=5, column=1)

        # 添加按钮固件到主窗口
        self.window.config(menu=self.main_menu)

        # 招生单位（输入控件）
        tk.Label(self.window, text='招生单位:', width=10, anchor=tk.W).grid(row=2)
        self.dwmc_entry = tk.Entry(self.window, width=25)
        self.dwmc_entry.grid(row=2, column=1)

        # 专业名称（输入控件）
        tk.Label(self.window, text='专业名称:', width=10, anchor=tk.W).grid(row=4)
        self.zymc_entry = tk.Entry(self.window, width=25)
        self.zymc_entry.grid(row=4, column=1)

        # 确定按钮
        tk.Button(self.window, text='确定', command=self.sure, background='SkyBlue').grid(row=11, sticky=tk.W)
        tk.Button(self.window, text='取消', command=self.exit, background='Violet').grid(row=11, column=1, sticky=tk.E)
        self.window.mainloop()

    def get_ssdm(self):
        self.ssdm = re.search(r'(\d+)', self.ssdm_v.get()).group(1)
        if self.ssdm == '0': self.ssdm = ''

    def get_mldm(self):
        try:
            self.mldm = re.search(r'(\d+)', self.mldm_v.get()).group(1)
        except AttributeError:
            self.mldm = 'zyxw'
        if self.mldm == '0':
            self.mldm = ''

    def get_yjxkdm(self):
        self.yjxkdm = re.search(r'(\d+)', self.yjxkdm_v.get()).group(1)

    def get_xxfs(self):
        if self.xxfs_v.get() == '全日制':
            self.xxfs = '1'
        if self.xxfs_v.get() == '非全日制':
            self.xxfs = '2'
        if self.xxfs_v.get() == '【忽略学习方式】':
            self.xxfs = ''

    def sure(self):
        self.dwmc = self.dwmc_entry.get()
        self.zymc = self.zymc_entry.get()
        tk.Label(self.window, text='参数输入完成', fg='red').grid(row=6)
        self.window.update()
        time.sleep(2)
        self.window.destroy()

    def exit(self):
        self.ssdm, self.dwmc, self.mldm, self.yjxkdm, self.zymc, self.xxfs = '', '', '', '', '', ''
        self.window.destroy()
        exit()


